Wstęp do Uczenia Maszynowego Projekt 1

Jędrzej Sokołowski, Filip Szympliński

23 kwietnia 2022

Wstęp

Poniższa praca jest raportem z pracy nad projektem nr 1 z przedmiotu Wstęp do Uczenia maszynowego. Celem projektu było opracowanie modelu przewidującego rezultat rozgrywek szachowych w sytuacjach gdy na szachownicy zostały jedynie trzy figury, biała wieża, biały król oraz czarny król. Zadaniem modelu jest podanie liczby w zakresie od -1 do 16 gdzie -1 odpowiada remisowi (albo okolicznościom bez mata w 16 ruchach) a jakakolwiek inna liczba ilości ruchów do zwycięstwa białych figur.

Wczytanie potrzebnych pakietów oraz danych

EDA oraz preprocessing

EDA - część 1.

Nie ma braków danych

Opisy zmiennych

white_king_file: Column location on the chess board of the white king

white_king_rank: Row location on the chess board of the white king

white_rook_file: Column location on the chess board of the white rook

white_rook_rank: Row location on the chess board of the white rook

black_king_file: Column location on the chess board of the black king

black_king_rank: Row location on the chess board of the black king

result: Predictor Class. optimal depth-of-win for White in 0 to 16 moves, otherwise drawn Values: {draw, zero, one, two, ..., sixteen}

Rozkłady zmiennych położenia

Widać tutaj, że zmienne white_rook_rank, white_rook_file oarz black_king_rank mają rozkład zbliżony do jednostajnego. O rozkładach reszty zmiennych nie można wyciągną żadnych dalekoidących wniosków.

Rozkład zmiennej celu (result)

Z powyższego histogramu widać, że pomijając wartość draw, która w pewnym sensie należy do osobnej kategorii, zmienna result ma rozkład mocno skośny w lewo (negative skew).

Jak widać z powyższych wartości i ich relacji (średnia < mediana < moda) mamy faktycznie do czynienia z rozkładem lewoskośnym.

Rozkłady zmiennych położenia względem zmiennej celu

Wykresy położenia figur szachowych

Z powyższego wyniku widać, że początkowe położenie czarnego króla może być w dowolnym miejscu na planszy. Dodatkowo, są pewne duże obszary, na których czarny król startuje dokładnie tyle samo razy.

Białych figury są w lepszej sytuacji, stąd biały król pojawia się początkowo jedynie na 10 polach. Gdy spojrzymy na położenie czarnego króla, widzimy, że naturalnie najrzadziej występuje on w pobliżu właśnie tych 10 pól.

W przypadku białej wieży, zgodnie z intuicją, najrzadziej pojawia się ona tam, gdzie jest jej król. Najbardziej "chaotyczne" jest początkowe położenie białej wieży, które jest kluczowe w szukaniu mata w rozważanych sytuacjach.

Preprocessing i dodawanie zmiennych

Kodowanie zmiennych kategorycznych

Dodawanie nowych kolumn

Skalowanie zmiennych opisujących położenie figur

Generowanie automatycznego raportu

EDA - część 2. (Heat maps)

Zmiana kierunku

Wykresy zależności zmiennych których moduł współczynnika korelacji był >= 0.6

Na powyższych wykresach widzimy tylko dodatnie zależności między konkretnymi kolumnami. Współczynnik korelacji dla żadnej pary kolumn nie wyniósł mniej niż 0.6.

Generowanie raportu w pandas profiling

Podsumowanie EDA

Celem powyższej części pracy było dokonanie wstępnej analizy zbioru danych o szachach oraz odpowiednie zmodyfikowanie wartości pewnych kolumn. Dotyczyło do głównie tych zawieracjące litery dla zmiennych z dopiskiem _file (zostały zamienione na cyfry) oraz kolumny result, gdzie wartości słowne zamienione zostały na liczby, a wartość draw na -1. Ponadto dodano kolumny określajhące odległość między królami w pionie (kings_distance_rank), poziomie (kings_distance_file) i sumarycznie (kings_distance_sum). Ostatnim etapem modyfikacji danych było przeskaloanie wartości. Dodatkowo w wyniku analizy zbioru uzyskane zostały następujące wnioski:

Modelowanie

Przygotowania

Podział danych na zbiór treningowy, walidacyjny oraz testowy.

Proporcje dobrane sa tak by zbiory były podzielone w na 70%/10%/20%

Wczytanie pakietów oraz zdefiniowanie używanych funkcji

Mimo tego, że rozważany przez nas problem dotyczy klasyfikacji, do metryk oceniających jakość wyniku dodaliśmy również RMSE, ponieważ istotną różnicą jest czy model zwrócił 4 czy 14 w sytuacji gdy poprawnym wynikiem było 3.

Pojedyncze klasyfikatory

One vs One

One vs Rest

Predykcyjność ogólna obu klasyfikatorów nie jest satysfakcjonująca, jednakże warto zauważyć, że oba dobrze sobie radzą z rozpoznawaniem remisów. Przy odpowiednim doborze parametrów pewnie predykcyjność remisów byłaby bardzo wysoka. Pomimo tego nie będziemy zajmować się tego typu klasyfikatorami, ponieważ nie dają one większej perspektywy do zwiekszenia predykcyjności.

XGBoost

Predykcyjność z domyślnymi parametrami

Dobór hiperparametrów

Wyjątkowo w tej części nie będzie używany GridShearch, bowiem czas wykonywania obliczeń jest zbyt długi.


Feature importance

Klasyfikator KNeighborsClassifier

Otrzymana dokładność jest gorsza od wielu wcześniejszych.

DecisionTreeClassifier

Predykcyjność z domyślnymi parametrami

Dobór hiperparametrów

Best: 0.803070 using {'criterion': 'gini', 'max_depth': 20, 'max_features': None, 'min_samples_split': 2}


Confusion Matrix

RandomForestClassifier

Predykcyjność z domyślnymi parametrami

Dobór hiperparametrów

Best: 0.811046 using {'max_depth': 16, 'max_features': None, 'min_samples_split': 2, 'n_estimators': 250}

Best: 0.815566 using {'max_depth': 28, 'n_estimators': 300}

Widać tutaj ciekawą sytuację. Porównyjąc uzyskane wyniki po doborze parametrów oraz te przed doborem mamy w obu przypadkach do czynienia z idealnym dopasdowaniem do zbioru treningowego (to raczej nie dziwi), lecz predykcyjność dla zbioru walidacyjnego jest już znacznie wyższa.


Confusion Matrix

Użycie BaggingClassifier

Klasyfikator GaussianNB

Rezultatem tego podejścia jest najgorsza otrzymana dokładność.

Metody łączące klasyfikatory

StackingClassifier

Confusion Matrix

VotingClassifier

Hard voting

Soft voting wieghted

Confusion Matrix

Soft voting

Confusion Matrix

Wybór modelu


Wybrany model

Dwa modele, które okazały się najlepszymi to XGBoost oraz StackingClassifier, minimalnie lepszy był ten drugi, dlatego właśnie StackingClassifier jest ostatecznie wybranym przez nas modelem.

StackingClassifier - dalsza ewaluacja

StackingClassifier - interpretowalność

Ze względu na to, że StackingClassifier jest pewnym połączeniem innych modeli skupiliśmy się w tym miejscu na modelach składowych. Przez to, że XGBoost był z nich najlepszy, do niego przyłożyliśmy największa wagę.

XGBoost

Powyższe wykresy obrazują, że dla szybko skończonych partii (w małej ilości ruchów) model podejmuje decyzje zgodnie z naszą intuicją. Wraz ze wzrostem długości gier powoli coraz ciężej przychodzi nam analiza wykresów, analogiczne do tego, że niedoświadczonemu graczowi ciężko jest myśleć w szachach kilkanaście ruchów do przodu.

Random Forest

Decision Tree

Podsumowanie

Wszystkie z warstwowych modeli wykorzystanych w finalnym modelu StackingClassifier posiadają podobne do siebie wykresy obrazujące ważność zmiennych. Stąd posiłkując się licznymi wykresami stworzonymi dla XGBoosta możemy stwierdzić, że finalny model jest interpretowalny i w głównej mierze zgodny z naszą intuicją.
Wynikowy model osiągnął skuteczność, którą można zaokrąglić do około 90% a błąd RMSE wyniku wynosił ledwie ok. 0.34 .